module CaracterizacoesHelper

  @@beneficios = {
    :adicional_frete_renovacao => "Adicional ao Frete para Renovação da Marinha Mercante - AFRMM",
    :iof_cambio_importacao     => "IOF nas operações de câmbio",
    :depreciacao_acelerada     => "Depreciação acelerada incentivada",
    :desconto_pis_pasep_cofins => "Desconto dos créditos da contribuição para o PIS/PASEP e da COFINS"
  }

  def isencao_label(key)
    @@beneficios[key]
  end

  def beneficios(caracterizacao = @caracterizacao)
    list = on_values(@@beneficios, caracterizacao)
    list.map! {|i| "Isenção do #{i}"} if caracterizacao.isencao?
    list
  end

  def resumo_beneficios(caracterizacao = @caracterizacao)
    list = on_values({:adicional_frete_renovacao => 'do AFRMM', :iof_cambio_importacao => 'do IOF'}, caracterizacao)
    "isenção #{list.to_sentence}"
  end

  def descricao_beneficios(caracterizacao = @caracterizacao, formatted = false)
    list   = beneficios(caracterizacao)
    prefix = list.size > 1 ? "dos benefícios fiscais de " : "do benefício fiscal de "
    suffix = list.to_sentence
    suffix = content_tag(:b, suffix) if formatted
    prefix + suffix
  end

  def lista_beneficios(caracterizacao = @caracterizacao)
    beneficios(caracterizacao).join(" e ")
  end

  def lista_atividades(caracterizacao)
    if caracterizacao.atividades.empty?
      "atividades não informadas"
    else
      a = caracterizacao.atividades
      (a.size == 1 ? "da atividade de " : "das atividades: ") + a.map(&:descricao).to_sentence
    end
  end
  
  def lista_atividades2(caracterizacao)
    if caracterizacao.atividades.empty?
      "atividades não informadas"
    else
      a = caracterizacao.atividades
      a.map(&:descricao).to_sentence
    end
  end

  def lista_produtos_por_atividade(caracterizacao)
    caracterizacao.produtos.aprovados.map do |produto|
      "#{produto.atividade.descricao} (#{produto.descricao})"
    end.join("\n")
  end

  private

  def on_values(hash, caracterizacao)
    hash.reject{|method, label| !caracterizacao.send(method)}.values.sort
  end

end
